#ifndef ENTITY_H
#define ENTITY_H

#include <QObject>
#include <defs/export.h>
#include <defs/global.h>

#include <QtGui>
#include "helpers/glbuffers.h"

namespace Opl{ namespace Gui {


        class Entity;
        O_PRIVATE_DECLARE(Entity);
        class EXPORTED Entity : public QGraphicsItem {

        public:

            enum { Type = UserType + 1 };
            Entity(int size, int x, int y);
            virtual ~Entity();
            virtual QRectF boundingRect() const;
            virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
        protected:
            virtual Entity *createNew(int size, int x, int y) = 0;
            virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
            virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
            virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
            virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
            virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
            virtual void keyPressEvent(QKeyEvent *event);
            virtual void wheelEvent(QGraphicsSceneWheelEvent *event);
            virtual int type() const;
            bool isInResizeArea(const QPointF &pos);

//            static void duplicateSelectedItems(QGraphicsScene *scene);
            static void deleteSelectedItems(QGraphicsScene *scene);
//            static void growSelectedItems(QGraphicsScene *scene);
//            static void shrinkSelectedItems(QGraphicsScene *scene);

            QTime& startTime();
        private:
            O_PRIVATE_DECLARE_MEMBER(Entity);
        };


        class QtBox : public Entity
        {
        public:
            QtBox(int size, int x, int y);
            virtual ~QtBox();
            virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
        protected:
            virtual Entity *createNew(int size, int x, int y);
        private:
            QVector3D m_vertices[8];
            QVector3D m_texCoords[4];
            QVector3D m_normals[6];
            Helpers::OpenGL::GLTexture *m_texture;
        };

    };};
#endif // ENTITY_H

